package abstract_factory

import "fmt"

type Button interface {
	Render()
}
type Checkbox interface {
	Render()
}
type GuiFactory interface {
	CreateButton() Button
	CreateCheckbox() Checkbox
}

type DarkButton struct {
}

func (r *DarkButton) Render() {
	fmt.Println("DarkButton Render")
}

type DarkTextBox struct {
}

func (r *DarkTextBox) Render() {
	fmt.Println("DarkTextBox Render")
}

type DarkGuiFactory struct {
}

func (r *DarkGuiFactory) CreateButton() Button {
	return &DarkButton{}
}
func (r *DarkGuiFactory) CreateCheckbox() Checkbox {
	return &DarkTextBox{}
}

type LightButton struct {
}

func (r *LightButton) Render() {
	fmt.Println("LightButton Render")
}

type LightTextBox struct {
}

func (r *LightTextBox) Render() {
	fmt.Println("LightTextBox Render")
}

type LightGuiFactory struct {
}

func (r *LightGuiFactory) CreateButton() Button {
	return &LightButton{}
}
func (r *LightGuiFactory) CreateCheckbox() Checkbox {
	return &LightTextBox{}
}
